# -*- coding: utf-8 -*-
"""
@Time    : 2024/8/1 10:15 
@Author  : ZhangShenao 
@File    : 2.获取请求体body.py 
@Desc    : 
"""

from flask import Flask, request

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route("/get_form_data", methods=["POST"])
def get_form_data() -> str:
    """获取form表单格式的请求数据"""

    # 通过request.form获取form表单格式的请求数据,类型为ImmutableMultiDict
    form_data = request.form
    print(f"form_data: {form_data}, type: {type(form_data)}")

    # 获取单个参数
    name = form_data.get("name")
    print(f"name: {name}")

    # 获取参数列表
    hobbies = form_data.getlist("hobbies")
    print(f"hobbies: {hobbies}")

    return "OK"


@app.route("/get_json_body", methods=["POST"])
def get_json_body() -> str:
    """获取json格式的请求body"""

    # 判断请求的Content-Type是否为json类型
    print(f"is json: {request.is_json}")

    # 通过request.json获取json格式的请求body,类型为dict
    json_body = request.json
    # json_body: {'name': 'zsa', 'age': 18}, type: <class 'dict'>
    print(f"json_body: {json_body}, type: {type(json_body)}")

    # 获取json数据
    name = json_body.get("name")
    age = json_body.get("age")
    print(f"name: {name}, age: {age}")

    return "OK"


@app.route("/get_other_data", methods=["POST"])
def get_other_data() -> str:
    """获取其他形式的请求数据"""

    # 可以通过request.data获取请求body,类型为bytes
    # 当请求数据无法被解析成query、form-data和json时,就可以通过request.data获取,并进行自定义处理,如xml文件等
    req_data = request.data
    print(f"req_data: {req_data}, type: {type(req_data)}")

    return "OK"


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
